export class TimeTools{
    /**
	 * 当前时间戳，从服务器 心跳包中获取服务器当前时间戳
	 */
    public static timestamp:number=0;
	/**
	 * 本地时间和服务器时间查找
	 */ 
	public static timeDifference:number=0;
	
    /**
     * 待定，time 单位是秒
     * @param time 
     * @returns 
     */
	public static Sleep(time:number):Promise<void>{
		return new Promise(resolve=>{
			let tid = setTimeout(()=>{
				clearTimeout(tid)
				tid=null
				resolve();
			},time * 1000)
		})
	}
	/**
	 * 是否使用服务器时间
	 */
	public static isUseSerTime:boolean=true

	/**
	 * 获取是本地时间还是服务器时间
	 */
	private static get Date():Date{
		return TimeTools.isUseSerTime ? new Date(TimeTools.timestamp) : new Date()
	}
	/**
	 * 获取当前时间戳
	 * @example
	 * TimeUtil.getTimestamp(); // 1614616955186
	 */
	public static getTimestamp(): number {
		return TimeTools.Date.getTime();
	}

	/**
	 * 获取当前日期（年/月/日）
	 * @example
	 * TimeUtil.getDate(); // "2021/3/2"
	 */
	public static getDate(): string {
		return TimeTools.Date.toLocaleDateString();
	}

	/**
	 * 获取当天指定时间的时间戳
	 * @param hour 时
	 * @param minute 分
	 * @param second 秒
	 * @example
	 * const time = TimeUtil.getTargetTimestamp(10, 20, 30); // 1601259630000
	 * new Date(time).toLocaleString(); // "上午10:20:30"
	 */
	public static getTargetTimestamp(hour: number = 0, minute: number = 0, second: number = 0): number {
		const start = new Date(TimeTools.Date.toLocaleDateString()).getTime();
		const target = (hour * 3600 + minute * 60 + second) * 1000;
		return new Date(start + target).getTime();
	}

	public static downTime(times:number){
		//计算小时数 转化为整数
		var h = Math.floor(times / 60 / 60) ;
		//如果小时数小于 10，要变成 0 + 数字的形式 赋值给盒子
		var hour:string = h < 10 ? "0" + h : h+"";
		//计算分钟数 转化为整数
		var m = Math.floor((times-h*60*60) / 60 );
		//如果分钟数小于 10，要变成 0 + 数字的形式 赋值给盒子
		var minute:string = m < 10 ? "0" + m : m+"";
		//计算描述 转化为整数
		var s = Math.floor(times-(h*60*60+m*60));
		var second:string = s < 10 ? "0" + s : s+"";
		return hour+":"+minute+":"+second;
	}
	/**
	 * 将时间戳转成年月日格式
	 * @param timestamp 
	 * @returns  
	 */
	public static convertTimeTo(timestamp:number):string{
		let date = new Date(timestamp * 1000);
		let Year = date.getFullYear();
		let Moth = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1);
		let Day = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate());
		let Hour = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours());
		let Minute = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
		let Sechond = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
		return Year + '/' + Moth + '/' + Day + '   '+ Hour +':'+ Minute  + ':' + Sechond;
	}
}